package com.example.demo.common.session;

import com.example.demo.common.constants.SessionContents;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletResponse;
import java.util.concurrent.TimeUnit;

/**
 * TODO
 *
 * @author wuhong-016
 * @version v1.0.0
 * @time: 2021/6/5 16:49
 */
@Component
public class SessionComponent {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 每校验一次登录  就延长一次session的有效期
     * 无动作30分钟之后，session时效
     *
     * @param sessionId
     * @return
     */
    public boolean isLogin(String sessionId) {
        sessionId = this.getSessionKey(sessionId);

        boolean isLogin = redisTemplate.hasKey(sessionId);
        if (isLogin) {
            redisTemplate.expire(sessionId, SessionContents.SESSION_TIMEOUT, SessionContents.SESSION_TIMEOUT_UNIT);
            return true;
        }
        return false;
    }

    /**
     * 登入
     * @param sessionId
     * @param username
     */
    public void doLogin(String sessionId, String username) {
        sessionId = this.getSessionKey(sessionId);
        redisTemplate.opsForValue().set(sessionId, username, SessionContents.SESSION_TIMEOUT, SessionContents.SESSION_TIMEOUT_UNIT);
    }

    /**
     * 登出
     * @param sessionId
     * @return
     */
    public void doLogout(String sessionId) {
        sessionId = this.getSessionKey(sessionId);
        redisTemplate.delete(sessionId);
    }


    /**
     * 获取session数据
     * @param sessionId
     * @return
     */
    public String getSession(String sessionId) {
        sessionId = this.getSessionKey(sessionId);
        return redisTemplate.opsForValue().get(sessionId);
    }


    /**
     * 为了方便redis数据管理 加一个统一前缀
     *
     * @param sessionId
     * @return
     */
    private String getSessionKey(String sessionId) {
        return SessionContents.SESSION_ID_PREFIX + sessionId;
    }

}
